package com.pai4j.domain.community.vo.request.aig;

import lombok.Data;

import java.util.List;

/**
 *
 *
 * @author: CYM-pai
 * @date: 2025/10/27 16:29
 **/
@Data
public class StableDiffusionRequestVO extends AigImageRequestVO {

    /**
     * 提示词
     * 绘画的文本描述（支持中文和英文描述），所支持的 lora 可以参考案例列表：https://www.aigcaas.cn/category/13.html
     */
    private String prompt;

    private String qr;

    private String qrBg;

    private List<String> init_images;

    private Integer n_iter = 1;

    /**
     * 图片宽度
     * 图片宽度，默认为512，一般情况下，尺寸越大品质越好，但是会更慢，而且会影响构图，例如一个人两个头等，推荐最大尺寸1080
     */
    private Integer width = 512;

    /**
     * 图片高度
     * 图片宽度，默认为512，一般情况下，尺寸越大品质越好，但是会更慢，而且会影响构图，例如一个人两个头等，推荐最大尺寸1080
     */
    private Integer height = 512;

    /**
     * 反面描述内容
     */
    private String negative_prompt;

    /**
     * 采样方法
     * 采样方法，默认为Euler，其他可选参数：Euler a,Euler,LMS,Heun,DPM2,DPM2 a,DPM++ 2S a,DPM++ 2M,DPM++ SDE,DPM++ 2M SDE,
     * DPM fast,DPM adaptive,LMS Karras,DPM2 Karras,DPM2 a Karras,DPM++ 2S a Karras,
     * DPM++ 2M Karras,DPM++ SDE Karras,DPM++ 2M SDE Karras,DDIM,PLMS,UniPC
     */
    private String sampler_index;

    /**
     * 生成步数
     * 生成步数，默认50，通常20步到25步左右最为合适
     */
    private Integer steps = 25;

    /**
     * 随机种子数
     * 控制生成图片是否可复现，用于在潜空间中生成最张量的种子，控制图像的内容，每生成一个图像都有自己的种子值，默认为-1
     */
    private Long seed = -1L;

    /**
     * 恢复面部缺陷
     * 应用了额外模型，该模型可以恢复面部缺陷，默认为 false
     */
    private Boolean restore_faces = false;

    /**
     * 附加种子值
     * 附加种子值，测试更多种子码变化之用
     */
    private Integer subseed;

    /**
     * 种子和variation seed之间的差值程度
     * 种子和variation seed之间的差值程度，如果生成了两张图，可以通过第一个图为seed，第二个图为subseed，然后设置subseed strength在0-1之间的强度变化，那么会生成逐渐过渡的两个图。
     */
    private Integer subseed_strength;

    /**
     * seed_resize_from_w
     * 对应 UI 界面的 Resize seed from width；默认为-1
     */
    private Integer seed_resize_from_w = -1;

    /**
     * seed_resize_from_h
     * 对应 UI 界面的 Resize seed from height；默认为-1
     */
    private Integer seed_resize_from_h = -1;

    /**
     * CFG
     * AI生图与你给的提示词的相关度，数值越高越会按照你说的内容下去生图。控制模型和prompt的匹配程度，
     * 1.忽视prompt， 3.更有创意，7，在prompt和freedom中取得平衡，15，遵守prompt，30，严格按照prompt
     */
    private Integer cfg_scale;

    /**
     * 噪声种子
     * 噪声种子（取值范围0.0-1.0）
     */
    private Float eta;

    /**
     * 风格
     * 风格参数，格式为["string"]
     */
    private List<String> styles;

    private String hr_prompt;
    private String hr_negative_prompt;

    /**
     *
     * 高清修复（Hires. fix）
     * 可以提升图片的画质，但是会耗费更多VRAM
     */
    private Boolean enable_hr;

    /**
     * 降噪强度
     * 降噪强度，取值范围是0-1，默认设置0.75。取值越大，说明图片变化越大，0表示图片几乎不变，1表示可能严重偏离原图。一般将该参数设置在0.6~0.8范围；
     */
    private Float denoising_strength;

    /**
     * 缩放系数
     * 缩放系数；默认为2
     */
    private Integer hr_scale;

    /**
     * 要使用的放大器
     * 高清修复模式下要使用的放大器
     */
    private String hr_upscaler;

    /**
     * 高清修复步数
     */
    private Integer hr_second_pass_steps;

    /**
     * 高清修复制定尺寸 x
     */
    private Integer hr_resize_x;

    /**
     * 高清修复制定尺寸 y
     */
    private Integer hr_resize_y;

    /**
     * 可平埔
     * 生成可以平铺的周期性图像，默认为false
     */
    private Boolean tiling;

    /**
     * 脚本/命令名称
     * 取值有prompt matrix（会生出一个表格图片，用于比对不同提示词生图的效果）, prompts from file or textbox（从写好提示词的文件生成图片）
     * , x/y/z plot（用于比对不同提示词、采样方法、CFG Scale、种子码的组合所生图的效果），通常与脚本/命令参数（script_args）搭配使用
     */
    private String script_name;

    /**
     * 脚本/命令参数
     * 一般用于 lor a模型或其他插件参数，例如：[0, true, true, "LoRA", "dingzhenlora_v1(fa7c1732cc95)", 1, 1]
     */
    private String script_args;

    private Double definition;
}
